﻿using System;
using Onshi.POS.Modelo.Entidades.Tipos;
using Onshi.POS.Modelo.Objetos;
using System.Collections.Generic;

namespace Onshi.POS.Modelo.Entidades
{
    public class Articulo : EntidadBase<Int32>
    {
        #region Atributos
        private TipoArticulo tipoArticulo;
        private RubroArticulo rubroArticulo;
        private DescuentoRecargo descuentoRecargo;
        private Marca marca;
        private TipoComisionArticulo tipoComisionArticulo;
        private TipoImpuestoArticulo tipoImpuestoArticulo;
        private TipoCostoArticulo tipoCostoArticulo;
        private Promocion promocion;
        private String codigo;
        private String nombre;
        private Int32 existenciaMinima;
        private Int32 existenciaMaxima;
        private String descripcionServicio;
        private Decimal costo;
        private Decimal comision;
        private Decimal comisionMaxima;
        private Decimal iva;
        private Decimal impuesto;
        private Boolean estaEliminado;
        private DetalleArticulo detalle;
        private Boolean tieneImagen;
        private Boolean tieneObservacion;
        private String marcaDescripcion;
        private String rubroDescripcion;
        private String tipoArticuloDescripcion;
        private String tipoImpuestoDescripcion;
        private String descuentoRecargoDescripcion;
        private String tipoComisionArticuloDescripcion;
        private String promocionDescripcion;
        private List<ArticuloAtributo> atributos;
        #endregion

        #region Propiedades

        public DetalleArticulo Detalle
        {
            get { return detalle; }
            set { detalle = value; }
        }

        public Boolean EstaEliminado
        {
            get { return estaEliminado; }
            set { estaEliminado = value; }
        }

        public Decimal Impuesto
        {
            get { return impuesto; }
            set { impuesto = value; }
        }

        public Decimal Iva
        {
            get { return iva; }
            set { iva = value; }
        }
        
        public Decimal ComisionMaxima
        {
            get { return comisionMaxima; }
            set { comisionMaxima = value; }
        }

        public Decimal Comision
        {
            get { return comision; }
            set { comision = value; }
        }

        public Decimal Costo
        {
            get { return costo; }
            set { costo = value; }
        }

        public String DescripcionServicio
        {
            get { return descripcionServicio; }
            set { descripcionServicio = value; }
        }

        public Int32 ExistenciaMaxima
        {
            get { return existenciaMaxima; }
            set { existenciaMaxima = value; }
        }

        public Int32 ExistenciaMinima
        {
            get { return existenciaMinima; }
            set { existenciaMinima = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public Promocion Promocion
        {
            get { return promocion; }
            set {
                promocionDescripcion = value.Nombre;
                promocion = value; 
            }
        }

        public TipoCostoArticulo TipoCosto
        {
            get { return tipoCostoArticulo; }
            set { tipoCostoArticulo = value; }
        }

        public TipoImpuestoArticulo TipoImpuesto
        {
            get { return tipoImpuestoArticulo; }
            set {
                TipoImpuestoDescripcion = value.Nombre;
                tipoImpuestoArticulo = value; 
            }
        }

        public TipoComisionArticulo TipoComision
        {
            get { return tipoComisionArticulo; }
            set {
                TipoComisionArticuloDescripcion = value.Nombre;
                tipoComisionArticulo = value; 
            }
        }

        public Marca Marca
        {
            get { return marca; }
            set {
                marcaDescripcion = value.Nombre;
                marca = value; 
            }
        }

        public DescuentoRecargo DescuentoRecargo
        {
            get { return descuentoRecargo; }
            set {
                DescuentoRecargoDescripcion = value.Nombre;
                descuentoRecargo = value; 
            }
        }

        public RubroArticulo Rubro
        {
            get { return rubroArticulo; }
            set { rubroArticulo = value; }
        }

        public TipoArticulo Tipo
        {
            get { return tipoArticulo; }
            set {
                tipoArticuloDescripcion = value.Nombre;
                tipoArticulo = value; 
            }
        }

        public String MarcaDescripcion 
        {
            get { return marcaDescripcion; }
        }

        public String TipoArticuloDescripcion
        {
            get { return tipoArticuloDescripcion; }
        }

        public String PromocionDescripcion 
        {
            get { return promocionDescripcion; }
        }

        public String RubroDescripcion
        {
            get { return rubroDescripcion; }
            set { rubroDescripcion = value; }
        }

        public String DescuentoRecargoDescripcion
        {
            get { return descuentoRecargoDescripcion; }
            set { descuentoRecargoDescripcion = value; }
        }

        public String TipoImpuestoDescripcion
        {
            get { return tipoImpuestoDescripcion; }
            set { tipoImpuestoDescripcion = value; }
        }

        public String TipoComisionArticuloDescripcion
        {
            get { return tipoComisionArticuloDescripcion; }
            set { tipoComisionArticuloDescripcion = value; }
        }

        public Boolean TieneObservacion 
        {
            get
            {
                if (detalle == null)
                    return tieneObservacion;
                else
                {
                    if (detalle.Observacion != null)
                        return true;
                    else
                        return false;
                }
            }
            set { tieneImagen = value; }
        }

        public Boolean TieneImagen
        {
            get
            {
                if (detalle == null)
                    return tieneImagen;
                else
                {
                    if (detalle.Imagen != null)
                        return true;
                    else
                        return false;
                }
            }
            set { tieneImagen = value; }
        }

        public List<ArticuloAtributo> Atributos
        {
            get { return Atributos; }
            set { Atributos = value; }
        }
        #endregion
    }
}
